
import subprocess

# shell=True, 指明此命令在 shell 环境下执行
# stdout=subprocess.PIPE 指明标准输入保存到 stdout 属性中
result = subprocess.run('ls ~', shell=True, stdout=subprocess.PIPE)
print('刚才您输入的命令是：', result.args)   # 执行的命令 'ls ~'
print('此程序运行的返回值是:', result.returncode)   # 即 #?

# result.stdout绑定的是 ls ~ 打印在屏幕上的数据的字节串
print('此程序的标准输出是：', result.stdout.decode())

# 执行一个命令，此命令会产生错误
r = subprocess.run('ls ~/abcdefg',     # ~/abcdefg 文件不存在
                   shell=True,
                   stdout=subprocess.PIPE,
                   stderr=subprocess.PIPE)
print("ls ~/abcdefg 命令执行的返回值是：", r.returncode)  # 2
print("ls ~/abcdefg 命令执行的标准输出是：", r.stdout)   # b''
print("ls ~/abcdefg 命令执行的标准错误输出是：", r.stderr.decode())  # 'ls: 无法访问'/root/abcdefg': 没有那个文件或目录'